[Amazon FSx for NetApp ONTAP] SMBでファイルを開いているセッションを削除してみた

[Amazon FSx for NetApp ONTAP] SMBでファイルを開いているセッションを削除してみた

他ユーザーが永遠とロックしていてファイルを開くことができないというときに
Clock Icon2024.08.24

OSが固まってファイルのロックを開放できない

こんにちは、のんピ(@non____97)です。

皆さんはファイルサーバー上のファイルを操作している時、クライアントのOSが固まってファイルのロックを開放できない状況になったことはありますか? 私はあります。

ファイルのロックを開放できないと、他の利用メンバーがファイルを参照、更新できず、業務に支障が出ます。

そのような場合、ファイルサーバーの管理者としてはファイルロックを強制的に解除したい時があります。

Amazon FSx for NetApp ONTAP(以降FSxN)、およびAmazon FSx for Windows File Server(FSxW)には、クライアントからのSMBセッションおよびファイルをクローズすることができ、こちらの機能によって対応が可能です。

今回はFSxNで試してみたので、紹介します。

やってみた

検証環境

検証環境は以下のとおりです。

[Amazon FSx for NetApp ONTAP] SMBでファイルを開いているセッションを削除してみた検証環境構成図.png

AD DCについては以下記事の検証で使用したものを流用します。

https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap-delegated-file-system-administrators-group/

ドメインユーザーについては以下記事で作成したものを使用しています。

https://dev.classmethod.jp/articles/amazon-fsx-for-netapp-ontap-access-based-enumeration/

エクスプローラーでSMBファイル共有にアクセスした場合のセッション確認

それではまず、エクスプローラーでファイルを開いた場合から確認します。

SMBクライアントEC2インスタンスからtest-user01で、事前に作成したファイル共有shareにアクセスします。

1.エクスプローラーでファイルにアクセス.png

アクセス後、ONTAP CLIからSMBセッションを確認することができました。

::> set diag

Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627                                         48s               1
                   10.0.0.34        CORP\test-user01         3

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118627
                   Connection ID: 1396824271
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.34
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\test-user01
                       UNIX User: pcuser
                     Open Shares: 1
                      Open Files: 3
                      Open Other: 0
                  Connected Time: 1m 8s
                       Idle Time: 52s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

共有フォルダのMMCスナップインfsmgmt.mscからも確認します。

AD DCにドメインのAdministratorでRDP接続し、タスクバーの検索ボックスに以下コマンドを入力して叩きます。

fsmgmt.msc /computer=SMB-SERVER.corp.non-97.net

以下のようにSMBサーバーに接続している現在のセッションを確認できます。

2.fsmgmt.msc :computer=SMB-SERVER.corp.non-97.net.png

MMCスナップインでセッション情報を確認するためのセッションが張られているので、Administratorのセッションが追加されていますね。

ONTAP CLIでも確認できました。

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627                                     10m 45s               1
                   10.0.0.34        CORP\test-user01         3
1396824275 13794244183659118631                                          3s               1
                   10.0.0.139       CORP\                    0
                                    Administrator
2 entries were displayed.

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118627
                   Connection ID: 1396824271
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.34
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\test-user01
                       UNIX User: pcuser
                     Open Shares: 1
                      Open Files: 3
                      Open Other: 0
                  Connected Time: 11m 51s
                       Idle Time: 11m 35s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118632
                   Connection ID: 1396824276
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.139
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 0
                      Open Other: 0
                  Connected Time: 11s
                       Idle Time: 3s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: ipc$

2 entries were displayed.

ただ、MMCスナップインの操作を数秒しないと、セッションから消えていました。操作するタイミングで都度セッションを張り直しているようです。

メモ帳でSMBファイル共有上のファイルを開いた場合のセッション確認

メモ帳でSMBファイル共有上のファイルを開いた場合のセッションを確認します。

開く前の状態は以下のとおりです。

3.Open Files.png

メモ帳でファイルを開きます。

4.セッションを削除しても強制的にファイルを閉じられたりはしない.png

ONTAP CLIでセッションを確認します。

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627                                          6s               1
                   10.0.0.34        CORP\test-user01         4

::*> cifs session file show

Node:       FsxId0e64a4f5386f74c87-01
Vserver:    svm
Connection: 1396824271
Session:    13794244183659118627
Connection Count: 1
File    File      Open Hosting                               Continuously
ID      Type      Mode Volume          Share                 Available
------- --------- ---- --------------- --------------------- ------------
15      Regular   r    vol_ntfs        share                 No
Path: test.txt

::*> cifs session file show -instance
There are no entries matching your query.

::*> cifs session file show -instance
There are no entries matching your query.

数秒だけ開いているファイルの情報を確認できました。

その間もメモ帳は開いたままですが、ONTAP CLIからは確認できませんでした。MMCスナップインからも同様に確認はできませんでした。

ファイルの読み書きの通信が発生している間のみONTAP CLIやMMCスナップインで確認できるようです。

ファイルをメモ帳で開いている状態でセッションを削除

ファイルをメモ帳で開いている状態でセッションを削除してみます。

ONTAP CLIでSMBセッションを削除します。

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824271 13794244183659118627                                      2m 48s               1
                   10.0.0.34        CORP\test-user01         3

::*> cifs session close -node FsxId0e64a4f5386f74c87-01 ?
  [ -vserver <vserver name> ]                                             Vserver (default: svm)
   [-session-id] <integer>                                                Session ID
  [ -connection-id <integer> ]                                            Connection ID
  [[-lif-address] <IP Address>]                                           Incoming Data LIF IP Address
  [ -address <IP Address> ]                                               Workstation IP address
  [ -auth-mechanism <Authentication Mechanism> ]                          Authentication Mechanism
  [ -windows-user <TextNoCase> ]                                          Windows User
  [ -unix-user <text> ]                                                   UNIX User
  [ -protocol-version <CIFS Dialects> ]                                   Protocol Version
  [ -continuously-available <CIFS Open File Protection> ]                 Continuously Available
  [ -is-session-signed {true|false} ]                                     Is Session Signed
  [ -smb-encryption-status {unencrypted|encrypted|partially-encrypted} ]  SMB Encryption Status

::*> cifs session close -node FsxId0e64a4f5386f74c87-01 -session-id 13794244183659118627 -connection-id 1396824271

::*> cifs session show
This table is currently empty.

削除できました。

セッション削除後もファイルは問題なくメモ帳で開けています。

この状態でファイルに追記をして、上書き保存をします。

5.上書き保存も問題なくできた.png

問題なくできました。

ONTAP CLIでセッションを確認すると、新規セッションが作成されていました。

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824280 13794244183659118636                                          3s               1
                   10.0.0.34        CORP\test-user01         1

ということで、セッションがなければ都度張り直してくれるようです。

メモ帳だけでなくワードパッドでも同様の挙動をしました。ただし、ここはアプリケーションによって挙動は異なると思うので過信は禁物です。

ファイルがロックされている場合の挙動の確認

管理者側でファイルを閉じることによる恩恵を感じたいので、ファイルがロックされている場合の挙動を確認します。

SMBクライアントEC2インスタンスにtest-user01を使ってRDP接続している環境にて、Powershellで以下コマンドを叩いてFileStreamを開いたままにします。

$filePath = "\\SMB-SERVER.corp.non-97.net\share\test.txt"
$fileStream = [System.IO.File]::Open($filePath, 'Open', 'Read', 'None')

これでファイルがロックされます。

試しにSMBクライアントEC2インスタンス上のtest-user01で、ロックしているファイルを開こうとするとThe process cannot access the file because it is being used by another processと表示され、開くことができませんでした。

6.The process cannot access the file because it is being used by another process.png

AD DCのドメインのAdministratorでも開こうとした際も同じメッセージが表示されます。

7.AD DCのドメインAdministratorでも同じメッセージ.png

Powershellから開こうとしても同じメッセージが出力されました。

PS C:\Users\Administrator> cat \\SMB-SERVER.corp.non-97.net\share\test.txt
cat : The process cannot access the file '\\SMB-SERVER.corp.non-97.net\share\test.txt' because it is being used by
another process.
At line:1 char:1
+ cat \\SMB-SERVER.corp.non-97.net\share\test.txt
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ReadError: (\\SMB-SERVER.co...\share\test.txt:String) [Get-Content], IOException
    + FullyQualifiedErrorId : GetContentReaderIOError,Microsoft.PowerShell.Commands.GetContentCommand

この時のセッションやファイルの状態は以下のとおりです。

::*> cifs session show

Node:    FsxId0e64a4f5386f74c87-01
Vserver: svm
Connection Session                                        Open         Idle      Connection
ID         ID      Workstation      Windows User         Files         Time           Count
---------- ------- ---------------- ---------------- --------- ------------ ---------------
1396824282 13794244183659118638                                         38s               1
                   10.0.0.34        CORP\test-user01         4
1396824283 13794244183659118639                                          8s               1
                   10.0.0.139       CORP\                    3
                                    Administrator
2 entries were displayed.

::*> cifs session show -instance

Vserver: svm

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118638
                   Connection ID: 1396824282
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.34
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\test-user01
                       UNIX User: pcuser
                     Open Shares: 1
                      Open Files: 4
                      Open Other: 0
                  Connected Time: 5m 8s
                       Idle Time: 47s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

                            Node: FsxId0e64a4f5386f74c87-01
                      Session ID: 13794244183659118639
                   Connection ID: 1396824283
    Incoming Data LIF IP Address: 10.0.8.246
          Workstation IP Address: 10.0.0.139
        Authentication Mechanism: Kerberos
           User Authenticated as: domain-user
                    Windows User: CORP\Administrator
                       UNIX User: root
                     Open Shares: 1
                      Open Files: 3
                      Open Other: 0
                  Connected Time: 55s
                       Idle Time: 6s
                Protocol Version: SMB3_1
          Continuously Available: No
               Is Session Signed: false
                    NetBIOS Name: -
           SMB Encryption Status: unencrypted
               Large MTU Enabled: true
                Connection Count: 1
                   Active Shares: share

2 entries were displayed.

::*> cifs session file show

Node:       FsxId0e64a4f5386f74c87-01
Vserver:    svm
Connection: 1396824282
Session:    13794244183659118638
Connection Count: 1
File    File      Open Hosting                               Continuously
ID      Type      Mode Volume          Share                 Available
------- --------- ---- --------------- --------------------- ------------
5       Regular   r    vol_ntfs        share                 No
Path: test.txt

::*> cifs session file show -instance

                  Node: FsxId0e64a4f5386f74c87-01
               Vserver: svm
               File ID: 5
         Connection ID: 1396824282
            Session ID: 13794244183659118638
      Connection Count: 1
             File Type: Regular
             Open Mode: r
Aggregate Hosting File: aggr1
   Volume Hosting File: vol_ntfs
            CIFS Share: share
  Path from CIFS Share: test.txt
            Share Mode: -
           Range Locks: 0
Continuously Available: No
           Reconnected: No
        FlexGroup MSID: 0

オープンしているファイルを確認できましたね。しばらく放置して再度コマンドを叩いた際も同様に表示されました。

MMCスナップインからでもtest-user01がtest.txtを開いていることが分かります。

8.test-user01がファイルを開いていることを確認.png

MMCスナップインの方がユーザー名も一緒に確認できるので運用上、楽そうです。

ONTAP CLIの場合はセッションIDとコネクションIDからどのユーザーとのセッションなのか判断する一手間がかかります。

MMCスナップインでファイルをクローズ

MMCスナップインでファイルをクローズします。

9.Close Open file.png

ファイルクローズの確認ポップアップが表示されます。Yesをクリックします。

10.削除確認.png

ONTAP CLIを確認すると、ファイルをクローズしたため、オープンしているファイル一覧に表示されなくなりました。

::*> cifs session file show -instance
There are no entries matching your query.

このタイミングで、AD DCにドメインのAdministratorでRDP接続しているものからメモ帳でファイルを開けられるようになりました。

また、Powershellでもファイルを開くことができることを確認しました。

PS C:\Users\Administrator> cat \\SMB-SERVER.corp.non-97.net\share\test.txt
test

test2

ただし、PowershellでFileStreamを開いているEC2インスタンス上からはこちらのファイルを開くことはできませんでした。ドメインのAdministratorでRDP接続して開こうとしても開けません。別コンピューターである必要があるようです。

11.別コンピューターからはアクセスできるようになったが同じセッションではダメそう.png

SMBセッションもクローズして変化があるのか確認します。

test-user01のセッションを削除します。

12.Close session.png

確認を求められるのでYesをクリックします。

13.Session Close確認.png

セッションのクローズがされました。

ただし、PowershellでFileStreamを開いているEC2インスタンス上からはこちらのファイルを開くことはできませんでした。ファイル操作をしている同一コンピューター上からはセッション削除をしても効果はないようですね。

以下コマンドでFileStreamを閉じることでファイル操作を行うことができるようになります。

$fileStream.Close()

ONTAP CLIでSMBセッションをクローズ

ONTAP CLIでSMBセッションのクローズができることも確認します。

再度以下コマンドを叩いて、ファイルをロックします。

$filePath = "\\SMB-SERVER.corp.non-97.net\share\test.txt"
$fileStream = [System.IO.File]::Open($filePath, 'Open', 'Read', 'None')

ONTAP CLIでファイルロックしているセッションをクローズします。

::*> cifs session file show -instance

                  Node: FsxId0e64a4f5386f74c87-01
               Vserver: svm
               File ID: 14
         Connection ID: 1396824284
            Session ID: 13794244183659118640
      Connection Count: 1
             File Type: Regular
             Open Mode: r
Aggregate Hosting File: aggr1
   Volume Hosting File: vol_ntfs
            CIFS Share: share
  Path from CIFS Share: test.txt
            Share Mode: -
           Range Locks: 0
Continuously Available: No
           Reconnected: No
        FlexGroup MSID: 0

::*> cifs session close -node FsxId0e64a4f5386f74c87-01 -session-id 13794244183659118640 -connection-id 1396824284

::*> cifs session file show -instance
There are no entries matching your query.

セッションクローズ後にAD DCからこちらのファイルを開こうとすると、問題なく開くことができました。

特定のユーザーが大量のファイルをつかんでいる場合は、そのユーザーのセッションごとクローズすれば問題なさそうです。

他ユーザーが永遠とロックしていてファイルを開くことができないというときに

Amazon FSx for NetApp ONTAPでSMBでファイルを開いているセッションを削除してみました。

他ユーザーが永遠とロックしていてファイルを開くことができないというときに役立ちそうですね。

この記事が誰かの助けになれば幸いです。

以上、AWS事業本部 コンサルティング部の のんピ(@non____97)でした!

この記事をシェアする

facebook logohatena logotwitter logo

© Classmethod, Inc. All rights reserved.